/**
 * 请说出下列最终的执行结果,并解释为什么
 */
var tmp = 123
if (true) {
  console.log(tmp)
  let tmp
}
/**
 * 运行结果: 报错
 * 
 * es6规定let声明变量前不能使用该变量, 如果let的声明没有变量提升,应该打印的是123,但是它报错了,说明是有提升的,只是规定了不能在声明前使用该变量, js引擎在检视下面的代码块有代码声明的时候, 会将var的声明提升到全局或函数作用域的顶部,会将let和const的声明放在暂时性死亡区,任何在暂时性死亡区访问变量都会导致运行错误,只有执行到变量声明的语句时,该变量才可以从暂时性死亡区移除并可以安全使用
 */